package utilitarios;

import java.io.Serializable;
import java.util.*;

import utilitarios.Lista;
import utilitarios.Musica;

public class Usuario implements Serializable{
	
	private String email;
	private String nome;
	private String senha;
	private List<Usuario> amigos;
	private List<Lista> listas;
	
	public Usuario(String email, String nome, String senha) throws Exception{
		if (!email.isEmpty() || !nome.isEmpty() || !senha.isEmpty()){
			this.email = email;
			this.nome = nome;
			this.senha = senha;
			this.amigos = new ArrayList<Usuario>();
			this.listas = new ArrayList<Lista>();
		}
		throw new Exception("Usuario nao pode ser criado");
	}

	public String getSenha() {
		return senha;
	}

	public String getEmail() {
		return email;
	}

	public String getNome() {
		return nome;
	}

	public boolean setSenha(String senhaAntiga, String novaSenha) {
		if (senhaAntiga == this.senha){
			this.senha = novaSenha;
			return true;
		}
		return false;
	}
	
	public boolean comparaSenha(String senha){
		if (senha == this.senha){
			return true;
		}
		return false;
	}
	
	public boolean criaLista(String nome) throws Exception{
		if (listas.size() > 0){
			for (Lista list : listas){
				if (list.getNome() == nome){
					throw new Exception("Lista já existente");
				}
			}
		}
		Lista list = new Lista(nome);
		return true;
	}
	
	public boolean addMusica(String nome, Musica music){
		for (Lista list : listas){
			if (list.getNome() == nome){
				try{
					list.addMusica(music);
				}	
				catch(Exception e){
					return false;
				}
			return true;
			}
		}
		return false;
		
	}
	
	public boolean removeLista(String nome){
		for (Lista list:listas){
			if (list.getNome() == nome){
				listas.remove(list);
				return true;
			}
		}
		return false;
	}
	
	public boolean addAmigo(Object obj){
		if (obj instanceof Usuario){
			Usuario user =  (Usuario)obj;
			amigos.add(user);
			return true;
		}
		return false;
	}

	public String toString() {
		return "Usuario [email=" + email + ", nome=" + nome +" ]";
	}	
	
	public boolean equals(Usuario user){
		if (user.getEmail().equals(email)){
			return true;
		}
		return false;
	}
	
	public boolean removeMusicaLista(String nomeLista, String nomeMusica){
		for (Lista lista : listas){
			if (lista.getNome() == nomeLista){
				lista.removeMusica(nomeMusica);
				return true;
			}
		}
		return false;
	}
	
	public boolean classificaMusica(String nomeMusica, int quantEstrelas){
		for(Lista list: listas){
			List<Musica> musicas = list.getLista();
			for (Musica music : musicas){
				if (music.getTitulo() == nomeMusica){
					music.setClassificacao(quantEstrelas);
				}
			}
		}
		return true;
	}
	
}

